package org.opsli.modulars.business.iot.protocol;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

public class ReadCgq {

    //解析数据
    public static Map getData(String s){
        s=s.toUpperCase();
        Map map=new HashMap<>();
        //开头
        String s1=s.substring(0,6);
        System.out.println(s1);

        //地址
        String s2=s.substring(6,10);
        System.out.println(s2);
        map.put("data2",covert(s2));
        //气体类型
        String s3=s.substring(10,14);
        System.out.println(s3);
        map.put("data3",covert(s3));

        //气体单位
        String s4=s.substring(14,18);
        System.out.println(s4);
        map.put("data4",covert(s4));
        //气体小数点个数
        String s5=s.substring(18,22);
        System.out.println(s5);
        map.put("data5",covert(s5));
        //量程上限
        String s6=s.substring(22,26);
        System.out.println(s6);
        map.put("data6",covert(s6));
        //量程下限
        String s7=s.substring(26,30);
        System.out.println(s7);
        map.put("data7",covert(s7));
        //一级报警设定
        String s8=s.substring(30,34);
        System.out.println(s8);
        map.put("data8",covert(s8));
        //二级报警设定
        String s9=s.substring(34,38);
        System.out.println(s9);
        map.put("data9",covert(s9));
        //零点
        String s10=s.substring(38,42);
        System.out.println(s10);
        map.put("data10",covert(s10));

        //标定点1
        String s11=s.substring(42,46);
        System.out.println(s11);
        map.put("data11",covert(s11));
        //标定点2
        String s12=s.substring(46,50);
        System.out.println(s12);
        map.put("data12",covert(s12));
        //标定点3
        String s13=s.substring(50,54);
        System.out.println(s13);
        map.put("data13",covert(s13));
        //零点标定AD值
        String s14=s.substring(54,58);
        System.out.println(s14);
        map.put("data14",covert(s14));
        //标定1AD值
        String s15=s.substring(58,62);
        System.out.println(s15);
        map.put("data15",covert(s15));
        //标定2AD值
        String s16=s.substring(62,66);
        System.out.println(s16);
        map.put("data16",covert(s16));
        //标定3AD值
        String s17=s.substring(66,70);
        System.out.println(s17);
        map.put("data17",covert(s17));

        //当前状态
        String s18=s.substring(70,74);
        System.out.println(s18);
        map.put("data18",covert(s18));
        //气体浓度
        String s19=s.substring(74,78);
        System.out.println(s19);
        map.put("data19",covert(s19));
        //温度
        String s20=s.substring(78,82);
        System.out.println(s20);
        BigDecimal b1=new BigDecimal(covert(s20));
        BigDecimal b2=new BigDecimal("10");
        String tem=b1.divide(b2).toString();
        map.put("data20",tem);
        //湿度
        String s21=s.substring(82,86);
        System.out.println(s21);
        map.put("data21",covert(s21));
        //报警记录总数
        String s22=s.substring(86,90);
        System.out.println(s22);
        map.put("data22",covert(s22));
        //最新报警记录数
        String s23=s.substring(90,94);
        System.out.println(s23);
        map.put("data23",covert(s23));
        return map;
    }

    //解析数据
    public static Map getData2(String s){
        s=s.toUpperCase();
        Map map=new HashMap<>();
        //开头
        String s1=s.substring(0,6);
        System.out.println(s1);

        //地址
        String s2=s.substring(6,10);
        System.out.println(s2);
        map.put("data",covert(s2));
        return map;
    }

    //解析数据
    public static Map getDatakk2(String s,Integer type){
        s=s.toUpperCase();
        Map map=new HashMap<>();
        //开头
        String s1=s.substring(0,6);
        System.out.println(s1);

        //地址
        String s2=s.substring(6,10);
        System.out.println(s2);
        if(type==24||type==26||type==28||type==30||type==32||type==34||type==36||type==38||type==40||type==42){
            String s3=s.substring(10,14);
            map.put("data2",covert(s3));
        }
        map.put("data",covert(s2));
        return map;
    }

    public static void main(String[] args){
       /* String s="01052C000100020003000400050006000700080009000A000B000C000D000E000F0010001100120013001400150016041A";*/
        String s="01052c0001000100000000006400000014003200000014003200460000000000000000000000000000010000800100adbb";
        System.out.println(s.length());
        s=s.toUpperCase();
        Map map=new HashMap<>();
        //开头
        String s1=s.substring(0,6);
        System.out.println(s1);

        //地址
        String s2=s.substring(6,10);
        System.out.println(s2);
        map.put("data2",covert(s2));
        //气体类型
        String s3=s.substring(10,14);
        System.out.println(s3);
        map.put("data3",covert(s3));

        //气体单位
        String s4=s.substring(14,18);
        System.out.println(s4);
        map.put("data4",covert(s4));
        //气体小数点个数
        String s5=s.substring(18,22);
        System.out.println(s5);
        map.put("data5",covert(s5));
        //量程上限
        String s6=s.substring(22,26);
        System.out.println(s6);
        map.put("data6",covert(s6));
        //量程下限
        String s7=s.substring(26,30);
        System.out.println(s7);
        map.put("data7",covert(s7));
        //一级报警设定
        String s8=s.substring(30,34);
        System.out.println(s8);
        map.put("data8",covert(s8));
        //二级报警设定
        String s9=s.substring(34,38);
        System.out.println(s9);
        map.put("data9",covert(s9));
        //零点
        String s10=s.substring(38,42);
        System.out.println(s10);
        map.put("data10",covert(s10));

        //标定点1
        String s11=s.substring(42,46);
        System.out.println(s11);
        map.put("data11",covert(s11));
        //标定点2
        String s12=s.substring(46,50);
        System.out.println(s12);
        map.put("data12",covert(s12));
        //标定点3
        String s13=s.substring(50,54);
        System.out.println(s13);
        map.put("data13",covert(s13));
        //零点标定AD值
        String s14=s.substring(54,58);
        System.out.println(s14);
        map.put("data14",covert(s14));
        //标定1AD值
        String s15=s.substring(58,62);
        System.out.println(s15);
        map.put("data15",covert(s15));
        //标定2AD值
        String s16=s.substring(62,66);
        System.out.println(s16);
        map.put("data16",covert(s16));
        //标定3AD值
        String s17=s.substring(66,70);
        System.out.println(s17);
        map.put("data17",covert(s17));

        //当前状态
        String s18=s.substring(70,74);
        System.out.println(s18);
        map.put("data18",covert(s18));
        //气体浓度
        String s19=s.substring(74,78);
        System.out.println(s19);
        map.put("data19",covert(s19));
        //温度
        String s20=s.substring(78,82);
        System.out.println(s20);
        BigDecimal b1=new BigDecimal(covert(s20));
        BigDecimal b2=new BigDecimal("10");
        String tem=b1.divide(b2).toString();
        map.put("data20",tem);
        //湿度
        String s21=s.substring(82,86);
        System.out.println(s21);
        map.put("data21",covert(s21));
        //报警记录总数
        String s22=s.substring(86,90);
        System.out.println(s22);
        map.put("data22",covert(s22));
        //最新报警记录数
        String s23=s.substring(90,94);
        System.out.println(s23);
        map.put("data23",covert(s23));
        System.out.println(map);



    }


    /**
     * @param: [content]
     * @return: int
     * @description: 十六进制转十进制
     */
    public static int covert(String content){
        int number=0;
        String [] HighLetter = {"A","B","C","D","E","F"};
        Map<String,Integer> map = new HashMap<>();
        for(int i = 0;i <= 9;i++){
            map.put(i+"",i);
        }
        for(int j= 10;j<HighLetter.length+10;j++){
            map.put(HighLetter[j-10],j);
        }
        String[]str = new String[content.length()];
        for(int i = 0; i < str.length; i++){
            str[i] = content.substring(i,i+1);
        }
        for(int i = 0; i < str.length; i++){
            number += map.get(str[i])*Math.pow(16,str.length-1-i);
        }
        return number;
    }
}
